/*************************************************
 * 描述：表格私有实现类
 *
 * File：cxitableprivate.h
 * Author：zhangzhiming@mozihealthcare.cn
 * Date：25-10-10
 * Update：
 * ************************************************/
#ifndef CXITABLEPRIVATE_H
#define CXITABLEPRIVATE_H

#include "controls/table/cxitablemodel.h"
#include "cxifilterproxy.h"
#include "cxisortproxy.h"

#include <controls/table/cxitable.h>
#include <private/table/cxiadvancedview.h>
#include <private/table/cxigroupproxy.h>

class CxiTablePrivate
{
	Q_DISABLE_COPY(CxiTablePrivate)

	Q_DECLARE_PUBLIC(CxiTable)

public:
	explicit CxiTablePrivate(CxiTable* p);

	~CxiTablePrivate();

	/**
	 * 设置原始模型
	 * @param model
	 */
	void setModel(CxiTableModel* model);

	/**
	 * 设置列配置
	 * @param configs
	 */
	void setColumnConfigs(const QList<cxitable::GridColumnConfig>& configs);

	/**
	 * 添加单个分组
	 * @param column 分组列
	 * @param groupTitle 分组标题
	 */
	void addGroup(int column, const QString& groupTitle) const;

	/**
	 * 添加多个分组
	 * @param groupConfigs
	 */
	void addGroups(const QList<cxitable::GroupConfig>& groupConfigs) const;

	/**
	 * 移除分组
	 * @param columns
	 */
	void removeGroups(const QList<int>& columns) const;

	/**
	 * 过滤
	 * @param column
	 * @param condition
	 */
	void onFilter(int column, const QString& condition);

	/**
	 * 清空过滤条件
	 */
	void clearFilter();

private:
	/**
	 * 更新视图模型
	 */
	void updateViewModel() const;

private:
	// 表格接口
	CxiTable* q_ptr;
	// 视图层
	CxiAdvancedView* m_view;
	// 模型
	CxiTableModel* m_model;
	// 分组代理模型
	CxiGroupProxy* m_groupProxy;
	// 过滤代理层
	CxiFilterProxy* m_proxyFilterModel;
	// 分组排序模型
	CxiSortProxy* m_proxySortModel;
	// 列配置
	QList<cxitable::GridColumnConfig> m_columnConfigs;
};


#endif//CXITABLEPRIVATE_H